#define LIST_INIT_SIZE 10
#define LIST_INCREMENT_SIZE 10

typedef struct Student {
    int age;
} Stu;

typedef struct Single_Node {
    Stu *data;
    struct Single_Node *next;
} S_Node;

typedef struct Double_Node {
    Stu *data;
    struct Double_Node *prior;
    struct Double_Node *next;
} D_Node;

typedef struct Linked_List {
    int s_size;
    int d_size;
    S_Node *s_head;
    D_Node *d_head;
} Link_List;

typedef struct Sequence_List {
    int size;
    int list_size;
    Stu *arr;
} Sq_List;

/**
 * 初始化单链表头结点
 */
void init_s_node_head(Link_List *list);

/**
 * 初始化双链表头结点
 */
void init_d_node_head(Link_List *list);

/**
 * 初始化循环单链表头结点
 */
void init_s_c_node_head(Link_List *list);

/**
 * 初始化循环双链表头结点
 */
void init_d_c_node_head(Link_List *list);

/**
 * 获取单链表指定位置的数据元素
 */
Stu *get_s_node_elem(Link_List *list, int index);

/**
 * 新增单链表指定位置的数据元素
 */
int insert_s_node_elem(Link_List *list, int index, Stu *stu);

/**
 * 删除单链表指定位置的数据元素
 */
Stu *delete_s_node_elem(Link_List *list, int index);

/**
 * 初始化顺序表
 */
void init_sq_list(Sq_List *list);

/**
 * 插入顺序表
 */
void insert_sq_list(Sq_List *list, int index, Stu *stu);
